package com.softer.wxzj.mapper;

import com.softer.wxzj.entity.*;
import com.softer.wxzj.mapper.base.BaseMapper;
import org.apache.ibatis.annotations.Param;
import org.jsoup.Connection;
import org.springframework.stereotype.Repository;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

@Repository
public interface BaseHouseInfoMapper extends BaseMapper<BaseHouseInfo> {
    /**
     * 查询房间名是否重复
     *
     * @param buildNo
     * @param cellNo
     * @param roomName
     * @return
     */
    int getRoomNameCountBuildNoAndCellNo(@Param("buildNo") String buildNo, @Param("cellNo") String cellNo, @Param("roomName") String roomName);

    List<String> getIsOwnerListByBuildNo(String buildNo);

    int getIsMaintainCountByBuildNo(String buildNo);

    int getMaxFloorByBuildNo(String buildNo);

    List<BaseHouseInfo> getListByBuildNoToTransform(String buildNo);

    int updateListByHouseId(@Param("list") List<BaseHouseInfo> list);

    int updateList(@Param("list") List<BaseHouseInfo> list);

    List<BaseHouseInfo> getMaxHouseNoByBuildNo(String buildNo);

    Integer getMaxHouseNo(@Param("houseUse") String houseUse, @Param("buildNo") String buildNo, @Param("floorNo") String floorNo);

    int insertHouseInfoList(List<BaseHouseInfo> list);

    /**
     * 根据业主id查询房间信息
     *
     * @param ownerId
     * @return
     */
    BaseHouseInfo getInfoByOwnerId(String ownerId);

    /**
     * 退款修改房屋字段
     *
     * @param houseInfo
     * @return
     */
    int refRevokeHouse(BaseHouseInfo houseInfo);

    /**
     * 退款审核不通过修改房屋字段
     *
     * @param houseInfo
     * @return
     */
    int refVetoHouse(BaseHouseInfo houseInfo);

    /**
     * 查询缴存状态根据房屋id
     *
     * @param id
     * @return
     */
    String getDueStateById(String id);

    /**
     * 通过房屋id查询房屋的地址自然幢
     *
     * @param id
     * @return
     */
    BaseHouseInfo getHouseAllName(String id);

    /**
     * 根据房间id查询housecity
     *
     * @param id
     * @return
     */
    String getHouseCityById(String id);

    /**
     * 根据房屋id查询处于缴存中的数量
     *
     * @param id
     * @return
     */
    int getCountDepReqListByHouseId(@Param("id") String id, @Param("ownerNo") String ownerNo);

    /**
     * 查询房屋维护列表的用的数据
     *
     * @param buildNo
     * @return
     */
    List<BaseHouseInfo> getHouseAndOwnerList(String buildNo);

    /**
     * 查询视图界面房屋列表
     *
     * @param baseHouseInfo
     * @return
     */
    List<BaseHouseInfo> getListToView(BaseHouseInfo baseHouseInfo);

    /**
     * 查询视图界面房屋列表
     *
     * @return
     */
    List<BaseHouseInfo> getListByCellNo(String cellNo);


    /**
     * 查询视图界面房屋列表
     *
     * @param baseHouseInfo
     * @return
     */
    List<BaseHouseInfo> getAllListToView(BaseHouseInfo baseHouseInfo);

    /**
     * 获取房屋调换页面列表
     *
     * @param baseHouseInfo 查询实体
     * @return 分页实体
     */
    List<BaseHouseInfo> getChangeHouseList(BaseHouseInfo baseHouseInfo);

    /**
     * 获取第二层房屋调换列表
     * 根据传入的房间ID，查询当前房间所在小区的所有房间
     *
     * @param baseHouseInfo 查询实体
     * @return 分页实体
     */
    List<BaseHouseInfo> getSecondChangeHouseList(BaseHouseInfo baseHouseInfo);

    /**
     * 查询变换前或者变化后房屋业主信息
     *
     * @param roomId 房间ID
     * @return 房屋信息
     */
    ChangeBuildMsg getChangeHouseInfo(String roomId);

    /**
     * insertOrUpdate
     *
     * @param baseHouseInfo
     * @return
     */
    int insertOrUpdate(BaseHouseInfo baseHouseInfo);

    /**
     * 从Excel中读取的房间信息
     *
     * @param baseHouseInfo 房间信息
     * @return 新增结果
     */
    int insertExcel(BaseHouseInfo baseHouseInfo);

    List<BaseBuildModifyDetail> getChangeModifyList(BaseBuildModifyDetail baseBuildModifyDetail);

    /**
     * 查询房屋调换查询列表
     *
     * @param baseBuildModifyDetail 查询实体
     *                              oldAddress 调换前房屋地址
     *                              newAddress 调换后房屋地址
     *                              createTime 申请开始时间
     *                              updateTime 申请结束时间
     *                              modifyCause 变更原因
     *                              creater 变更人
     * @return 查询结果
     */
    List<BaseBuildModifyDetail> getChangeModifyInfoList(BaseBuildModifyDetail baseBuildModifyDetail);

    /**
     * 修改房屋状态为销户
     *
     * @param id       房屋ID
     * @param modifier 修改人
     * @return 修改结构
     */
    int updateState(@Param("id") String id, @Param("modifier") String modifier);

    /**
     * 拆分/合并的房屋新增
     *
     * @param splitMergeReqDetail 房屋信息
     * @return 新增结构
     */
    int insertSplitMerge(SplitMergeReqDetail splitMergeReqDetail);

    /**
     * 根据单元id删除房屋
     *
     * @param cellNo
     * @return
     */
    int deleteByCellNo(String cellNo);

    /**
     * 根据cellNo查询房间数量
     *
     * @param cellNo
     * @return
     */
    int getHouseCountByCellNo(String cellNo);

    /**
     * 根据单元id查询房间列表  主要用在单元变更操作三个数值时
     *
     * @param cellNo
     * @return
     */
    List<String> getRoomNameByCell(String cellNo);

    /**
     * 根据单元号 楼层号查询房间编号集合
     *
     * @param cellNo
     * @param floorNo
     * @return
     */
    List<String> getRoomNoByCellNoAndFloorNo(@Param("cellNo") String cellNo, @Param("floorNo") String floorNo);

    /**
     * 根据单元号 楼层号查询最大房间编号
     *
     * @param cellNo
     * @param floorNo
     * @return
     */
    String getMaxRoomNoByCellNoAndFloorNo(@Param("cellNo") String cellNo, @Param("floorNo") String floorNo);


    /**
     * 模糊查询房屋调换变更列表
     *
     * @param zoneCode 区域代码
     * @param fuzzy    模糊查询参数
     * @return 房屋调换变更列表
     */
    List<BaseHouseInfo> fuzzySearch(@Param("zoneCode") String zoneCode, @Param("fuzzy") String fuzzy);

    /**
     * 查询房屋和业主详情
     *
     * @param id 房屋Id
     * @return 详情信息
     */
    BaseOwnerInfoMap getHouseAndOwnerInfo(String id);

    /**
     * 查询关联附房列表
     *
     * @param baseHouseInfo
     * @return
     */
    List<BaseHouseInfo> getBindSubHouseList(BaseHouseInfo baseHouseInfo);

    /**
     * 业主批量维护列表
     *
     * @param baseHouseInfo
     * @return
     */
    List<BaseHouseInfo> getOwnerListToView(BaseHouseInfo baseHouseInfo);

    /**
     * 根据自然幢id 查询单元名列表
     *
     * @param buildNo
     * @return
     */
    List<String> getCellNameListByBuildNo(String buildNo);

    /**
     * 根据自然幢id 查询房屋性质列表
     *
     * @param buildNo
     * @return
     */
    List<String> getHouseUseListByBuildNo(String buildNo);

    /**
     * 查询自然幢下边是否有房屋
     */
    int selectHouse(String buildNo);

    /**
     * 清除房间面积
     *
     * @param id
     * @return
     */
    int clearStruArea(String id);

    /**
     * 通过房屋id查询自然幢id
     *
     * @param id
     * @return
     */
    String selectBuildNoFromHouseId(String id);

    /**
     * 查询该自然幢下是否有房屋和单元
     *
     * @param id
     * @return
     */
    int selectHouseAndCellFromBuild(String id);

    /**
     * 根据单元id楼层号查询房屋数量
     *
     * @param cellNo
     * @param floorNo
     * @return
     */
    int getCountByCellNoAndFloorNo(@Param("cellNo") String cellNo, @Param("floorNo") String floorNo);

    /**
     * 查询新增房间时的基础信息
     *
     * @param cellNo
     * @return
     */
    Map<String, Object> getMapByCellNo(String cellNo);

    /**
     * 根据自然幢编号和楼层号查询可添加的单元列表  用于填充添加层界面下拉框
     *
     * @param floorNo
     * @param buildNo
     * @return
     */
    List<BaseHouseInfo> getCellByBuildNoAndFloorNoToInput(@Param("floorNo") String floorNo, @Param("buildNo") String buildNo);

    int getCountByRegionId(@Param("RegionId") String RegionId, @Param("dueState") String dueState);

    int getCountByBuildId(@Param("BuildId") String BuildId, @Param("dueState") String dueState);

    List<BaseHouseInfo> findList(@Param("info") BaseHouseInfo info);

    List<BaseHouseInfo> getHouseListByBuilIds(@Param("ids") String[] ids);

    /**
     * 查询房屋业主列表，用在资金退款部分退款列表
     *
     * @param baseHouseInfo
     * @return
     */
    List<BaseHouseInfo> getHouseListToRef(BaseHouseInfo baseHouseInfo);

    /**
     * 查询列表，用在批量退款
     *
     * @param buildNo
     * @return
     */
    List<BaseHouseInfo> getListToRef(String buildNo);

    /**
     * 根据小区ID查询房间列表
     *
     * @param regionId 小区ID
     * @param buildId  自然幢ID
     * @param cellId   单元ID
     * @return 房间列表
     */
    List<BaseHouseInfo> getHouseListByRegionId(@Param("regionId") String regionId, @Param("buildId") String buildId, @Param("cellId") String cellId);

    int updatePayAmountById(BaseHouseInfo baseHouseInfo);

    /**
     * 修改房间金额
     *
     * @param baseHouseInfo
     * @return
     */
    int updateMoneyById(BaseHouseInfo baseHouseInfo);

    /**
     * 查询该房屋的实缴金额
     *
     * @param houseId
     * @return
     */
    String selectPayAmount(String houseId);

    /**
     * 查询当前资金余额大于0的房屋信息，用在结息模块
     *
     * @return
     */
    List<BaseHouseInfo> getHouseListToInterest(String interestDate);

    /**
     * 查询当前资金余额大于0的房屋的承办银行，用在结息模块
     *
     * @return
     */
    String getBankIdListToInterest();

    /**
     * 修改房屋的状态
     *
     * @param progress
     * @param id
     * @return
     */
    int changeFlowInProgress(@Param("progress") String progress, @Param("id") String id);

    int updateToAccKeep(@Param("funBal") BigDecimal funBal, @Param("id") String id, @Param("dueState") String dueState, @Param("progress") String progress);

    /**
     * 查询是否存在交存在途业务
     *
     * @param id 房屋ID
     * @return 交存ID
     */
    List<String> checkDepReq(String id);

    /**
     * 查询是否存在使用业务
     *
     * @param id 房屋ID
     * @return 使用ID
     */
    List<String> checkExpReq(String id);

    /**
     * 业主维护的房屋信息
     *
     * @param baseHouseInfo
     * @return
     */
    List<BaseHouseInfo> getListNotDep(BaseHouseInfo baseHouseInfo);

    /**
     * 已经维护玩房屋
     *
     * @param baseHouseInfo
     * @return
     */
    List<BaseHouseInfo> selectHaveArea(BaseHouseInfo baseHouseInfo);

    List<BaseHouseInfo> selectHaveAreaAndOwner(BaseHouseInfo baseHouseInfo);

    /**
     * 为维护业主或为维护房屋
     *
     * @param baseHouseInfo
     * @return
     */
    List<BaseHouseInfo> selectNotHaveArea(BaseHouseInfo baseHouseInfo);

    List<BaseHouseInfo> selectNotDep(BaseHouseInfo baseHouseInfo);

    List<BaseHouseInfo> selectHaveDep(BaseHouseInfo baseHouseInfo);

    /**
     * 修改银行
     *
     * @param id
     * @param bankCode
     * @return
     */
    int updateBankNo(@Param("id") String id, @Param("bankCode") String bankCode);

    /**
     * 视图列表显示
     *
     * @param baseHouseInfo
     * @return
     */
    List<BaseHouseInfo> getPageListToView(BaseHouseInfo baseHouseInfo);

    /**
     * 根据自然幢编号查询房屋列表
     *
     * @param buildNo
     * @return
     */
    List<BaseHouseInfo> getListByBuildNo(String buildNo);

    /**
     * 修改房间号，用于排序
     *
     * @param detail 修改的实体
     */
    void updateRoomNo(SplitMergeReqDetail detail);

    /**
     * 修改主房id
     *
     * @param id
     * @param ownerId
     * @return
     */
    int updateOwnerId(@Param("id") String id, @Param("ownerId") String ownerId);

    /**
     * 查询房间交存总金额
     *
     * @param houseId 房间ID
     * @return 交存总金额
     */
    BigDecimal getPayAmount(String houseId);

    /**
     * 查询房间退款总金额
     *
     * @param houseId 房间ID
     * @return 退款总金额
     */
    BigDecimal getRefPayAmount(String houseId);

    /**
     * 查询房屋交存列表
     *
     * @param id 房屋ID
     * @return 交存集合
     */
    List<DepReqListInfo> getDepList(String id);

    /**
     * 修改交存房间ID
     *
     * @param houseId 房间ID
     * @param id      交存ID
     * @param buildId 自然幢ID
     * @return 修改状态
     */
    int updateDepHouseId(@Param("houseId") String houseId, @Param("id") String id, @Param("buildId") String buildId);

    /**
     * 查询房间的退款列表
     *
     * @param id 房间ID
     * @return 退款集合
     */
    List<RefReqList> getRefList(String id);

    /**
     * 修改退款表
     *
     * @param houseId 房间ID
     * @param id      退款ID
     * @return 退款结果
     */
    int updateRefReqList(@Param("houseId") String houseId, @Param("id") String id);

    /**
     * 修改房屋地址
     *
     * @param houseSite
     * @param id
     * @return
     */
    int updateHouseSite(@Param("houseSite") String houseSite, @Param("id") String id);

    /**
     * 修改房屋状态
     *
     * @param id
     * @param state
     * @return
     */
    int updateStateById(@Param("id") String id, @Param("state") String state);

    /**
     * @param cellNo
     * @param flowNo
     * @return
     */
    List<BaseHouseInfo> selectByCellNoAndFloor(@Param("cellNo") String cellNo, @Param("flowNo") String flowNo);

    /**
     * @param cellNo
     * @param roomNo
     * @return
     */
    List<BaseHouseInfo> selectByCellNoAndRoomNo(@Param("cellNo") String cellNo, @Param("roomNo") String roomNo);

    /**
     * 删除房屋
     *
     * @param ids
     * @return
     */
    int delHouse(String ids);

    /**
     * 获取变更实体
     *
     * @param map list 列名集合
     *            id   变更ID
     * @return 变更实体
     */
    BaseHouseInfo getChangeColumnList(Map<String, Object> map);

    /**
     * 通过单元id查询房屋使用
     *
     * @param cellNo
     * @return
     */
    int selectByCell(String cellNo);

    /**
     * 查询房屋有没有关联复方
     *
     * @param id
     */
    int selectCountByMainHouse(String id);

    /**
     * 通过单元查询房屋信息
     *
     * @param cellNo
     * @return
     */
    List<BaseHouseInfo> selectAllByCell(String cellNo);

    /**
     * 通过单元号查询房屋
     *
     * @param cellNo
     * @return
     */
    List<BaseHouseInfo> selectByCellNo(String cellNo);

    /**
     * 查单元下的房屋信息（包括删除）
     *
     * @param cellNo
     * @return
     */
    int selectByCellNoDel(String cellNo);

    List<BaseHouseInfo> selectByCellNoList(String cellNo);

    /**
     * f房屋添加
     *
     * @param map
     * @return
     */
    BaseHouseInfo getChangeColumnListAll(Map<String, Object> map);

    /**
     * 查询修改单元层数和户数
     */
    BaseCellInfo selectAstrictFloor(String cellNo);

    /**
     * 查看这个房屋是不是已经添加
     *
     * @param cellId
     * @param floorNo
     * @param roomNo
     * @return
     */
    int selectByCellNoAndFloorAndRoom(@Param("cellId") String cellId, @Param("floorNo") int floorNo, @Param("roomNo") int roomNo);

    /**
     * 查询该单元下的所有房屋
     *
     * @param cellId
     * @return
     */
    String selectByCellNoId(String cellId);

    /**
     * 查询 房屋log表集合
     *
     * @param roomId 房间ID
     * @return log表数据集合
     */
    List<AccTransactionLog> getTransactionLog(String roomId);

    /**
     * 修改log表
     *
     * @param houseId 房间ID
     * @param id      log表ID
     * @return 修改条数
     */
    int updateTransactionLog(@Param("houseId") String houseId, @Param("id") String id);

    int selectNotDepByBuild(String buildNo);

    int updateOwnerState(@Param("id") String id, @Param("ownerState") String ownerState);

    int updatePrice(@Param("id") String id, @Param("price") BigDecimal price);

    /**
     * 查询缴存模式
     *
     * @param id
     * @return
     */
    List<String> selectByDep(String id);

    /**
     * 查询这个缴存类型有没有被使用过
     *
     * @param id
     * @return
     */
    int selectDepCount(String id);

    /**
     * 修改房屋信息
     *
     * @param baseHouseInfo
     * @return
     */
    int updateView(BaseHouseInfo baseHouseInfo);

    /**
     * 自然幢查询id
     *
     * @param baseHouseInfo
     * @return
     */
    List<BaseHouseInfo> houseAndOwner(BaseHouseInfo baseHouseInfo);

    BaseHouseInfo selectHouseById(String id);

    /**
     * 查询字典类型有没有被使用
     *
     * @param id
     * @return
     */
    int selectType(String id);

    /**
     * 和
     *
     * @param buildNo
     * @return
     */
    BaseHouseInfo selectCountByBuildId(String buildNo);

    BaseHouseInfo selectCountByRegionNo(String regionNo);

    int changeDueState(@Param("id") String id, @Param("dueState") String dueState);

    /**
     * 查询附房
     *
     * @param id
     * @return
     */
    List<BaseHouseInfo> selectMain(String id);

    int selectAllByBuild(String id);


    int selectByBuildAndFloor(@Param("buildNo") String buildNo, @Param("cellNo") String cellNo, @Param("floorNo") String floorNo, @Param("roomNo") String roomNo);

    /**
     * 根据自然幢ID，单元ID，楼层，房号查询房间是否存在
     *
     * @param buildId 自然幢ID
     * @param cellId  单元ID
     * @param floorNo 楼层
     * @param roomNo  房号
     * @return 房间
     */
    BaseHouseInfo getInfoByName(@Param("buildId") String buildId, @Param("cellId") String cellId, @Param("floorNo") String floorNo, @Param("roomNo") String roomNo);

    /**
     * 资金补齐查看列表
     *
     * @param ids
     * @return
     */
    List<BaseHouseInfo> getHouseListByBuilIdsdevelop(@Param("ids") String[] ids, @Param("baseHouseInfo") BaseHouseInfo baseHouseInfo);

    /**
     * 查询需要资金补齐的房屋数量
     * @param regionId 小区ID
     * @param buildId 自然幢ID
     * @return 房屋数量
     */
    int getDepDevelopNum(@Param("regionId") String regionId, @Param("buildId") String buildId);

    /**
     * 资金补齐审核详情
     *
     * @param id
     * @return
     */
    List<BaseHouseInfo> selectBydepReqList(String id);

    /**
     * 修改房屋状态
     *
     * @param houseId
     * @param ownerState
     * @param state
     * @return
     */
    int updateOwnerStateAndPross(@Param("houseId") String houseId, @Param("state") String state, @Param("ownerState") String ownerState);

    /**
     * @param id
     * @param dueAmount
     */
    void updateFirstById(@Param("id") String id, @Param("dueAmount") BigDecimal dueAmount);
}
